🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / core / database / src / commonTest / kotlin / org / meshtastic / core / database / dao / CommonDiscoveryDaoTest.kt
Displaying Raw • Download
core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/CommonDiscoveryDaoTest.kt 41414f832f938b655c97bc07509bc140ea16e2a3 (41414f83) Text, 18.82 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72package T7ee787org.meshtastic.core.database.dao
Tff7b72import T7ee787kotlinx.coroutines.flow.first
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787org.meshtastic.core.database.MeshtasticDatabase
Tff7b72import T7ee787org.meshtastic.core.database.entity.DiscoveredNodeEntity
Tff7b72import T7ee787org.meshtastic.core.database.entity.DiscoveryPresetResultEntity
Tff7b72import T7ee787org.meshtastic.core.database.entity.DiscoverySessionEntity
Tff7b72import T7ee787org.meshtastic.core.database.entity.DiscoverySessionStatus
Tff7b72import T7ee787org.meshtastic.core.database.getInMemoryDatabaseBuilder
Tff7b72import T7ee787kotlin.test.AfterTest
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertNotNull
Tff7b72import T7ee787kotlin.test.assertNull
Tff7b72import T7ee787kotlin.test.assertTrue
Tff7b72abstract Tff7b72class T56d364CommonDiscoveryDaoTest Tb4b4b4{
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3databaseTb4b4b4: Te6edf3MeshtasticDatabase
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3daoTb4b4b4: Te6edf3DiscoveryDao
Tff7b72suspend Tff7b72fun Td2a8ffcreateDbTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3database Tff7b72= Te6edf3getInMemoryDatabaseBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3dao Tff7b72= Te6edf3databaseTb4b4b4.Te6edf3discoveryDaoTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tf0883e@AfterTest
Tff7b72fun Td2a8ffcloseDbTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72::Te6edf3databaseTb4b4b4.Te6edf3isInitializedTb4b4b4) Te6edf3databaseTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)
Tb4b4b4}
T8b949e// region Session CRUD
Tf0883e@Test
Tff7b72fun Td2a8ffrecoverableSetMatchesSqlListTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3fromSql Tff7b72=
Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3RECOVERABLE_SQL_LISTTb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff"Ta5d6ff,Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3removeSurroundingTb4b4b4(Ta5d6ff"Ta5d6ff'Ta5d6ff"Tb4b4b4) Tb4b4b4}Tb4b4b4.Te6edf3toSetTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3fromSqlTb4b4b4, Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3RECOVERABLETb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffinsertSession_returnsAutoGeneratedIdTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3session Tff7b72= Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff1Te6edf3_000_000LTb4b4b4)
Tff7b72val Te6edf3id Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3sessionTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3id Tff7b72> T79c0ff0Tb4b4b4, Ta5d6ff"Ta5d6ffAuto-generated id should be > 0Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetSession_returnsInsertedSessionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3id Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff2Te6edf3_000_000LTb4b4b4, Te6edf3homePreset Tff7b72= Ta5d6ff"Ta5d6ffMEDIUM_SLOWTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3loaded Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3idTb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3loadedTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3idTb4b4b4, Te6edf3loadedTb4b4b4.Te6edf3idTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffMEDIUM_SLOWTa5d6ff"Tb4b4b4, Te6edf3loadedTb4b4b4.Te6edf3homePresetTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Te6edf3_000_000LTb4b4b4, Te6edf3loadedTb4b4b4.Te6edf3timestampTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetSession_returnsNullForMissingTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(T79c0ff9T79c0ff9T79c0ff9LTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffupdateSession_modifiesExistingRowTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3id Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff3Te6edf3_000_000LTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3original Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3idTb4b4b4)Tff7b72!!
Te6edf3daoTb4b4b4.Te6edf3updateSessionTb4b4b4(Te6edf3originalTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3completionStatus Tff7b72= Ta5d6ff"Ta5d6ffstoppedTa5d6ff"Tb4b4b4, Te6edf3totalUniqueNodes Tff7b72= T79c0ff5Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3updated Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3idTb4b4b4)Tff7b72!!
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffstoppedTa5d6ff"Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3completionStatusTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff5Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3totalUniqueNodesTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffupdateSessionAggregates_preservesCompletionStatusTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3id Tff7b72=
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(
Te6edf3testSessionTb4b4b4(Te6edf3homePreset Tff7b72= Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3COMPLETETb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3updateSessionAggregatesTb4b4b4(
Te6edf3sessionId Tff7b72= Te6edf3idTb4b4b4,
Te6edf3totalUniqueNodes Tff7b72= T79c0ff5Tb4b4b4,
Te6edf3totalDwellSeconds Tff7b72= T79c0ff1T79c0ff2LTb4b4b4,
Te6edf3totalMessages Tff7b72= T79c0ff3Tb4b4b4,
Te6edf3totalSensorPackets Tff7b72= T79c0ff4Tb4b4b4,
Te6edf3furthestNodeDistance Tff7b72= T79c0ff5T79c0ff0T79c0ff0.0Tb4b4b4,
Te6edf3avgChannelUtilization Tff7b72= T79c0ff2T79c0ff2.5Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3updated Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3idTb4b4b4)Tff7b72!!
Te6edf3assertEqualsTb4b4b4(Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3COMPLETETb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3completionStatusTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff5Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3totalUniqueNodesTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff2LTb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3totalDwellSecondsTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3totalMessagesTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff4Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3totalSensorPacketsTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff5T79c0ff0T79c0ff0.0Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3furthestNodeDistanceTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2T79c0ff2.5Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3avgChannelUtilizationTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffupdateSessionCompletionStatus_updatesOnlyTheStatusTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3id Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3homePreset Tff7b72= Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3daoTb4b4b4.Te6edf3updateSessionCompletionStatusTb4b4b4(Te6edf3idTb4b4b4, Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3FAILEDTb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3daoTb4b4b4.Te6edf3updateSessionCompletionStatusTb4b4b4(Tffa657LongTb4b4b4.Te6edf3MAX_VALUETb4b4b4, Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3FAILEDTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3updated Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3idTb4b4b4)Tff7b72!!
Te6edf3assertEqualsTb4b4b4(Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3FAILEDTb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3completionStatusTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff"Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3homePresetTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffupdateRecoverableSessionCompletionStatus_updatesRecoverableSessionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3id Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3RESTORE_PENDING_FAILEDTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3updatedRows Tff7b72= Te6edf3daoTb4b4b4.Te6edf3updateRecoverableSessionCompletionStatusTb4b4b4(Te6edf3idTb4b4b4, Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3FAILEDTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3updatedRowsTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3FAILEDTb4b4b4, Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3idTb4b4b4)Tff7b72!!Tb4b4b4.Te6edf3completionStatusTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffupdateRecoverableSessionCompletionStatus_ignoresTerminalSessionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3id Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3COMPLETETb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3updatedRows Tff7b72= Te6edf3daoTb4b4b4.Te6edf3updateRecoverableSessionCompletionStatusTb4b4b4(Te6edf3idTb4b4b4, Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3FAILEDTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3updatedRowsTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3COMPLETETb4b4b4, Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3idTb4b4b4)Tff7b72!!Tb4b4b4.Te6edf3completionStatusTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffupdateRecoverableSessionCompletionStatus_returnsZeroForMissingSessionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3updatedRows Tff7b72= Te6edf3daoTb4b4b4.Te6edf3updateRecoverableSessionCompletionStatusTb4b4b4(T79c0ff9T79c0ff9T79c0ff9LTb4b4b4, Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3FAILEDTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3updatedRowsTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffdeleteSession_removesRowTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3id Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3deleteSessionTb4b4b4(Te6edf3idTb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3idTb4b4b4)Tb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region Interrupted-session lookup (crash / BLE-loss recovery)
Tf0883e@Test
Tff7b72fun Td2a8ffgetInterruptedSession_returnsInProgressSessionForDeviceTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(
Te6edf3testSessionTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3deviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4, Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3IN_PROGRESSTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3found Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getInterruptedSessionTb4b4b4(Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3foundTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3IN_PROGRESSTb4b4b4, Te6edf3foundTb4b4b4.Te6edf3completionStatusTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetInterruptedSession_returnsInterruptedSessionTooTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(
Te6edf3testSessionTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3deviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4, Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3INTERRUPTEDTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3found Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getInterruptedSessionTb4b4b4(Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3foundTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3INTERRUPTEDTb4b4b4, Te6edf3foundTb4b4b4.Te6edf3completionStatusTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetInterruptedSession_returnsPendingHomeRestoreSessionsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3address Tff7b72= Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"
Tff7b72val Te6edf3pendingStatuses Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3RESTORE_PENDING_COMPLETETb4b4b4,
Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3RESTORE_PENDING_FAILEDTb4b4b4,
Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3RESTORE_PENDING_STOPPEDTb4b4b4,
Tb4b4b4)
Te6edf3pendingStatusesTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3status Tff7b72-Tff7b72>
Tff7b72val Te6edf3sessionId Tff7b72=
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff1LTb4b4b4)Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3deviceAddress Tff7b72= Te6edf3addressTb4b4b4, Te6edf3completionStatus Tff7b72= Te6edf3statusTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3found Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getInterruptedSessionTb4b4b4(Te6edf3addressTb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3foundTb4b4b4, Ta5d6ff"Ta5d6ffStatus Tffd700$Te6edf3statusTa5d6ff should be treated as interruptedTa5d6ff"Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3statusTb4b4b4, Te6edf3foundTb4b4b4.Te6edf3completionStatusTb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3deleteSessionTb4b4b4(Te6edf3sessionIdTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetInterruptedSession_returnsNullForDifferentDeviceTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(
Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3deviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:OTHER-DEVICETa5d6ff"Tb4b4b4, Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3IN_PROGRESSTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getInterruptedSessionTb4b4b4(Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetInterruptedSession_returnsNullForCompletedSessionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(
Te6edf3testSessionTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3deviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4, Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3COMPLETETb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getInterruptedSessionTb4b4b4(Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetInterruptedSession_returnsMostRecentWhenMultipleMatchTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(
Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff1LTb4b4b4)
Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3deviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4, Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3INTERRUPTEDTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(
Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff2LTb4b4b4)
Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3deviceAddress Tff7b72= Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4, Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3IN_PROGRESSTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3found Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getInterruptedSessionTb4b4b4(Ta5d6ff"Ta5d6ffx:AA:BB:CC:DD:EE:FFTa5d6ff"Tb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3foundTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2LTb4b4b4, Te6edf3foundTb4b4b4.Te6edf3timestampTb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region Session sort order (getAllSessions returns newest-first)
Tf0883e@Test
Tff7b72fun Td2a8ffgetAllSessions_orderedByTimestampDescendingTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff1T79c0ff0T79c0ff0LTb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff3T79c0ff0T79c0ff0LTb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff2T79c0ff0T79c0ff0LTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3sessions Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getAllSessionsTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3sessionsTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff3T79c0ff0T79c0ff0LTb4b4b4, Te6edf3sessionsTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3timestampTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2T79c0ff0T79c0ff0LTb4b4b4, Te6edf3sessionsTff7b72[T79c0ff1Tff7b72]Tb4b4b4.Te6edf3timestampTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff0T79c0ff0LTb4b4b4, Te6edf3sessionsTff7b72[T79c0ff2Tff7b72]Tb4b4b4.Te6edf3timestampTb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region Preset result relation loading
Tf0883e@Test
Tff7b72fun Td2a8ffgetPresetResults_returnsResultsForSessionTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffSHORT_FASTTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3results Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getPresetResultsTb4b4b4(Te6edf3sessionIdTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3resultsTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3resultsTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3presetName Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff" Tb4b4b4}Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3resultsTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3presetName Tff7b72=Tff7b72= Ta5d6ff"Ta5d6ffSHORT_FASTTa5d6ff" Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetPresetResults_doesNotReturnOtherSessionResultsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3session1 Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff1LTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3session2 Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff2LTb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3session1Tb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffATa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3session2Tb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffBTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3results Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getPresetResultsTb4b4b4(Te6edf3session1Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3resultsTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffATa5d6ff"Tb4b4b4, Te6edf3resultsTff7b72[T79c0ff0Tff7b72]Tb4b4b4.Te6edf3presetNameTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetPresetResultsFlow_emitsOnInsertTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3initial Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getPresetResultsFlowTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3initialTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3updated Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getPresetResultsFlowTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3sizeTb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region Discovered node relation loading
Tf0883e@Test
Tff7b72fun Td2a8ffgetDiscoveredNodes_returnsNodesForPresetResultTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3presetId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getDiscoveredNodesTb4b4b4(Te6edf3presetIdTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3nodesTb4b4b4.Te6edf3sizeTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffinsertDiscoveredNodes_batchInsertTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3presetId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3batch Tff7b72=
Te6edf3listOfTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1Tb4b4b4)Tb4b4b4, Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff2Tb4b4b4)Tb4b4b4, Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff3Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodesTb4b4b4(Te6edf3batchTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3daoTb4b4b4.Te6edf3getDiscoveredNodesTb4b4b4(Te6edf3presetIdTb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffupdateDiscoveredNode_modifiesExistingRowTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3presetId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3nodeId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff4T79c0ff2Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3original Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getDiscoveredNodesTb4b4b4(Te6edf3presetIdTb4b4b4)Tb4b4b4.Te6edf3first Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3id Tff7b72=Tff7b72= Te6edf3nodeId Tb4b4b4}
Te6edf3daoTb4b4b4.Te6edf3updateDiscoveredNodeTb4b4b4(Te6edf3originalTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3snr Tff7b72= T79c0ff1T79c0ff2.5fTb4b4b4, Te6edf3rssi Tff7b72= Tff7b72-T79c0ff5T79c0ff5Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3updated Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getDiscoveredNodesTb4b4b4(Te6edf3presetIdTb4b4b4)Tb4b4b4.Te6edf3first Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3id Tff7b72=Tff7b72= Te6edf3nodeId Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff2.5fTb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3snrTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Tff7b72-T79c0ff5T79c0ff5Tb4b4b4, Te6edf3updatedTb4b4b4.Te6edf3rssiTb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region Cascade deletion
Tf0883e@Test
Tff7b72fun Td2a8ffdeleteSession_cascadesPresetResultsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffSHORT_FASTTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3deleteSessionTb4b4b4(Te6edf3sessionIdTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getPresetResultsTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffPreset results should be cascade-deletedTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffdeleteSession_cascadesDiscoveredNodesTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3presetId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff2Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3deleteSessionTb4b4b4(Te6edf3sessionIdTb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getDiscoveredNodesTb4b4b4(Te6edf3presetIdTb4b4b4)Tb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffDiscovered nodes should be cascade-deletedTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffdeleteSession_doesNotAffectOtherSessionsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3session1 Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff1LTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3session2 Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff2LTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3preset1 Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3session1Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3preset2 Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3session2Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3preset1Tb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3preset2Tb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff2Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3deleteSessionTb4b4b4(Te6edf3session1Tb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getSessionTb4b4b4(Te6edf3session2Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3daoTb4b4b4.Te6edf3getPresetResultsTb4b4b4(Te6edf3session2Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3daoTb4b4b4.Te6edf3getDiscoveredNodesTb4b4b4(Te6edf3preset2Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region Aggregate queries
Tf0883e@Test
Tff7b72fun Td2a8ffgetUniqueNodeCount_countsAcrossPresetsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3preset1 Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffATa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3preset2 Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4, Te6edf3presetName Tff7b72= Ta5d6ff"Ta5d6ffBTa5d6ff"Tb4b4b4)Tb4b4b4)
T8b949e// Same node 100 appears in both presets
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3preset1Tb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3preset1Tb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3preset2Tb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3preset2Tb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff3T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3daoTb4b4b4.Te6edf3getUniqueNodeCountTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffNode 100 appears in both presets but should count onceTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetUniqueNodeNums_returnsDistinctNodeNumsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3presetId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff2T79c0ff0Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3nums Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getUniqueNodeNumsTb4b4b4(Te6edf3sessionIdTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3setOfTb4b4b4(T79c0ff1T79c0ff0LTb4b4b4, T79c0ff2T79c0ff0LTb4b4b4)Tb4b4b4, Te6edf3numsTb4b4b4.Te6edf3toSetTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetMaxDistance_returnsLargestDistanceTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3presetId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1Tb4b4b4, Te6edf3distanceFromUser Tff7b72= T79c0ff5T79c0ff0T79c0ff0.0Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff2Tb4b4b4, Te6edf3distanceFromUser Tff7b72= T79c0ff1T79c0ff5Te6edf3_000Tb4b4b4.T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff3Tb4b4b4, Te6edf3distanceFromUser Tff7b72= T79c0ff3Te6edf3_000Tb4b4b4.T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff5Te6edf3_000Tb4b4b4.T79c0ff0Tb4b4b4, Te6edf3daoTb4b4b4.Te6edf3getMaxDistanceTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetMaxDistance_returnsNullWhenNoNodesTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getMaxDistanceTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ffgetMaxDistance_returnsNullWhenAllDistancesNullTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3sessionId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3presetId Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertPresetResultTb4b4b4(Te6edf3testPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Te6edf3daoTb4b4b4.Te6edf3insertDiscoveredNodeTb4b4b4(Te6edf3testNodeTb4b4b4(Te6edf3presetIdTb4b4b4, Te6edf3nodeNum Tff7b72= T79c0ff1Tb4b4b4, Te6edf3distanceFromUser Tff7b72= Tff7b72nullTb4b4b4)Tb4b4b4)
Te6edf3assertNullTb4b4b4(Te6edf3daoTb4b4b4.Te6edf3getMaxDistanceTb4b4b4(Te6edf3sessionIdTb4b4b4)Tb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region Flow queries
Tf0883e@Test
Tff7b72fun Td2a8ffgetSessionFlow_emitsUpdatesOnChangeTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3createDbTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3id Tff7b72= Te6edf3daoTb4b4b4.Te6edf3insertSessionTb4b4b4(Te6edf3testSessionTb4b4b4(Te6edf3timestamp Tff7b72= T79c0ff5Te6edf3_000_000LTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3initial Tff7b72= Te6edf3daoTb4b4b4.Te6edf3getSessionFlowTb4b4b4(Te6edf3idTb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertNotNullTb4b4b4(Te6edf3initialTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffin_progressTa5d6ff"Tb4b4b4, Te6edf3initialTb4b4b4.Te6edf3completionStatusTb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region Helpers
Tff7b72private Tff7b72fun Td2a8fftestSessionTb4b4b4(Te6edf3timestampTb4b4b4: Tffa657Long Tff7b72= T79c0ff1Te6edf3_000_000LTb4b4b4, Te6edf3homePresetTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff"Tb4b4b4) Tff7b72= Te6edf3DiscoverySessionEntityTb4b4b4(
Te6edf3timestamp Tff7b72= Te6edf3timestampTb4b4b4,
Te6edf3presetsScanned Tff7b72= Ta5d6ff"Ta5d6ffLONG_FAST,SHORT_FASTTa5d6ff"Tb4b4b4,
Te6edf3homePreset Tff7b72= Te6edf3homePresetTb4b4b4,
Te6edf3completionStatus Tff7b72= Te6edf3DiscoverySessionStatusTb4b4b4.Te6edf3IN_PROGRESSTb4b4b4,
Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8fftestPresetResultTb4b4b4(Te6edf3sessionIdTb4b4b4: Tffa657LongTb4b4b4, Te6edf3presetNameTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ffLONG_FASTTa5d6ff"Tb4b4b4) Tff7b72= Te6edf3DiscoveryPresetResultEntityTb4b4b4(
Te6edf3sessionId Tff7b72= Te6edf3sessionIdTb4b4b4,
Te6edf3presetName Tff7b72= Te6edf3presetNameTb4b4b4,
Te6edf3dwellDurationSeconds Tff7b72= T79c0ff3T79c0ff0Tb4b4b4,
Te6edf3uniqueNodes Tff7b72= T79c0ff5Tb4b4b4,
Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8fftestNodeTb4b4b4(Te6edf3presetResultIdTb4b4b4: Tffa657LongTb4b4b4, Te6edf3nodeNumTb4b4b4: Tffa657LongTb4b4b4, Te6edf3distanceFromUserTb4b4b4: Tffa657Double? Tff7b72= Tff7b72nullTb4b4b4) Tff7b72= Te6edf3DiscoveredNodeEntityTb4b4b4(
Te6edf3presetResultId Tff7b72= Te6edf3presetResultIdTb4b4b4,
Te6edf3nodeNum Tff7b72= Te6edf3nodeNumTb4b4b4,
Te6edf3snr Tff7b72= T79c0ff5.0fTb4b4b4,
Te6edf3rssi Tff7b72= Tff7b72-T79c0ff7T79c0ff0Tb4b4b4,
Te6edf3distanceFromUser Tff7b72= Te6edf3distanceFromUserTb4b4b4,
Tb4b4b4)
T8b949e// endregion
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.16s